פרק סיבוכיות פרק סיבוכיות המושג יעילות מהו? במדעי המחשב היעילות נמדדת בעזרת מדדי סיבוכיות, החשובים שבהם: של אלגוריתמים יעילותם תוכן הפרק: יעילות מהי (זיכרון וזמן, זמן ריצה T( של אלגוריתם מהו, מהם case, worst,best case, average case דוגמאות (מציאת מינימום, חיפוש איבר, מושגי סיבוכיות, דוגמאות, שיפור בפקטור קבוע לעומת שיפור התלוי בקצב גדילת הקלט, מדוע אלגוריתם יעיל עדיף על מחשב, Ο, Ω, מהיר, מושגים אסימפטוטיים- Θ הצורה הסגורה של.T( שיטות ניתוח זמן ריצה של אלגוריתמים איטרטיביים. שיטות ניתוח זמן ריצה של אלגוריתמים רקורסיביים: שיטת ההצבה (איטרציות, ניחוש ואימותו באינדוקציה מתמטית, שימוש ביוריסטיקות, משפט המסטר.. זמן - נמדד באמצעות מס' פעולות היסוד המבוצעות ע"י המעבד בביצוע האלגוריתם.. זיכרון (מקום - שטח הזיכרון שהאלגוריתם דורש. נמדד באמצעות מס' גורמים כמו מס' המשתנים ומס' מבני הנתונים המשמשים בהרצת האלגוריתם וגודלם. נשים לב שגם המקום וגם הזמן שהאלגוריתם דורש משתנים מקלט לקלט. למרות שבשיעורים הקרובים נתרכז בסיבוכיות של זמן - חקר סיבוכיות המקום נעשה באופן דומה. פרק סיבוכיות שיפורים בזמן קבוע: קיימות דרכים סטנדרטיות רבות לשיפור זמן הריצה של אלגוריתם נתון. אחדות מהן משולבות בפעולותיהם של מהדרים, והופכות את אלה למהדרים המבצעים אופטימיזציות. פרק סיבוכיות הערה: לא כל בעיה ניתנת לחישוב, לדוגמא בעיית העצירה problem :(Halt הקלט: טקסט של תכנית מחשב P (בשפה x. - המסומן ב P - וקלט אפשרי ל L הפלט: תשובה לשאלה האם התכנית תעצור כאשר תרוץ על הקלט x. כמו כן ישנם בעיות הניתנות לחישוב, אך הפתרון שמוצע עבורם יכול לקחת מיליוני שנים כמו בעיית הסוכן הנוסע, הפתרון הנאיבי לבעיות המיון וכו' המטרה לתת חישוב יעיל! מה זה יעיל?. שיטות לכתיבת אלגוריתמים מהירים.. שיטות לניתוח זמן ריצה, מהירות אלגוריתמים.. חסמים תחתונים. לעומת - 00 שיפור בקבוע. שיפורים בסדרי גודל: אמנם שיפור זמן הריצה של אלגוריתם ב- 50% הוא מרשים, אך במקרים רבים אנו יכולים להשיג שיפורים הרבה יותר טובים. דהיינו לא בשיעור קבוע של 50%, 0% או אפילו 90%, אלא שיפורים ששיעורם הולך וגדל ככל שהקלט גדל יותר. לעומת - שיפור בסדר גודל. 4
פרק סיבוכיות דוגמא: בעיית מציאת מינימום במערך. קלט: מערך בגודל של מספרים ממשיים. פלט: האיבר המינימלי במערך. אלגוריתם א':.. זמן הריצה: מיין את המערך בסדר עולה. החזר את האיבר הראשון במערך. תלוי בשיטת המיון בשורה. בסימונים של סדרי גודל, ישנם, למשל, אלגוריתמים בזמן.Θ( או Θ( אלגוריתם ב': זמן הריצה: פרק סיבוכיות. mi. for k to. if A[k] < mi the.. mi A[k].. miidex k. retur mi ad miidex מספר הפעולות לכל היותר: T( +++++4+ Θ ( מספר הפעולות לכל הפחות: T( ++++++4 Θ ( 5 הגדרה: קלט בגודל פרק סיבוכיות 7 זמן הריצה של אלגוריתם,, מסומן ב- במספר הפעולות הבסיסיות,T( עבור נמדד (פעולות אטומיות במחשב שהאלגוריתם מבצע. פעולה בסיסית היא פעולה שמתבצעת במחשב במספר קבוע של צעדים. האם תמיד צריך לכלול בזמן הריצה את כל הפעולות המתבצעות באלגוריתם? בסיבוכיות של אלגוריתם משתמשים במונחים של סדרי גודל ( Θ, Ο, Ω פרק סיבוכיות המקרה הגרוע ביותר- Case :Worst זמן הריצה על קלט כלשהו בגודל. ולכן מתעלמים מהקבועים ומהאברים בעלי סדר נמוך וקובעים את זמן הריצה רק על פי האיבר בעל הסדר הגבוה ביותר. 8 הוא הגדול ביותר של האלגוריתם המקרה הטוב ביותר- Case :Best הוא זמן הריצה הקטן ביותר של האלגוריתם על קלט כלשהו בגודל. המקרה הממוצע- Case :Average הוא זמן הריצה הממוצע של אלגוריתם בממוצע מעל כל זמני הריצה של האלגוריתם מעל כל הקלטים האפשריים בגודל. מסקנה: כשנדבר על זמן ריצה ו/או סיבוכיות של אלגוריתם צריך לציין באיזה מקרה מדובר!
פרק סיבוכיות הערה חשובה: בדרך כלל נתמקד רק בזמן הריצה של אלגוריתם במקרה הגרוע ביותר ולעיתים נתמקד בנוסף גם בזמן הריצה במקרה הממוצע (מדוע? נשים לב! לעיתים זמן ריצה של שתי פונקציות יהיה שונה והסיבוכיות שלהן תהיה זהה. דוגמא: הפונקציות 00 + + 500 + 780 + פרק סיבוכיות דוגמא: בעיית חיפוש של איבר במערך. הקלט: מערך לא ממויין A בגודל של איברים (נניח שלכל איבר יש גם מפתח וערך key לחיפוש. הפלט: אם קיים איבר ב- A במקום i כך ש- A[i]key אזי החזר i, אחרת החזר 0. אלגוריתם:. For i! to do. if A[i]key the.. retur(i ad exit. retur 0 זמן הריצה: במקרה הטוב ביותר האיבר שמחפשים נמצא בתחילת המערך (היכן בדיוק? ולכן (Θ( T, best כלומר הזמן לחיפוש הוא קבוע c. במקרה הגרוע ביותר האיבר שמחפשים ולכן (היכן בסוף? נמצא בסוף המערך.T worst (Θ( שונות, אבל שוות אסימפטוטית (מדוע?. 9 0 פרק סיבוכיות במקרה הממוצע:! נסמן ב- לכן: T i את הזמן שלוקח למצוא את האיבר כאשר הוא במקום ה- i במערך A.! נניח שלכל מקום i יש הסתברות שווה להכיל את האיבר. T average T + T ( + L+ Ti + L+ T כלומר: אולם לכל T ( average T i i T i i, i (מדוע? ולכן: T average ( + + ( i i Θ( הפונקציה פרק סיבוכיות מסקנה: הזמן במקרה הממוצע זהה לזמן במקרה הגרוע ביותר. 000 00 00 0 5000 500 500 50 5 99 49 5 0 7 90000 0000 00 0 9 7 0 0 7 8 0 000 0 9 04 מספר 0 גדול לאין 7 שיעור! 0 0 0 744 מספר גדול לאין שיעור לצורך השוואה: מספר הפרוטונים ביקום הוא מספר כבן 80. מספר המיקרו-שניות מאז המפץ הגדול הוא מספר כבן 4.
פרק סיבוכיות נריץ את אלגוריתם א' על מחשב א' ואת אלגוריתם ב' על מחשב ב'. נחשב את הזמן בפועל של כל אלגוריתם כלומר קלט בגודל מיליון, לדוגמא ניקח.0 ניקח מחשב א' : T(,00MIPS שעות 0000 פרק סיבוכיות מדוע אלגוריתם יעיל עדיף על מחשב מהיר, וכן מדוע מתעלמים, בסיבוכיות של זמן הריצה,T( מהקבועים ומאיברים בעלי סדר נמוך? אחד המדדים לביצועי מחשב הוא ה- Millio Istructios Per Secod -MIPS שפירושו מספר הפעולות במיליונים שהמחשב מבצע בשניה. דוגמא: נניח מחשב א' הוא במהירות,00MIPS כלומר 0 8 פעולות בשניה, נניח מחשב ב' הוא במהירות,MIPS כלומר 0 פעולות בשניה. נניח שנתונים לנו שני אלגוריתמים לפתרון בעיה זהה. " אלגוריתם א' רץ בזמן T( " אלגוריתם ב' רץ בזמן.T(50 ( 0 0 4 0 8 8 0 0 מחשב ב' : T(50,MIPS 50*0 *0 0 500 50* 0 0 מס' פעולות של האלגוריתם חלקי מס' פעולות בשניה של המחשב דקות 5 00 4 מסקנה: פרק סיבוכיות אלגוריתם ב' מאלגוריתם א'. אלגוריתם ב' ממחשב א', על מחשב ב' אלגוריתם ב' יעיל בסדר גודל לכן כשהרצנו את שאיטי פי 00 הריצה פרק סיבוכיות לכן: כדי לסווג אלגוריתמים לפי זמן מאלגוריתם א'. רץ מהר יותר ולכן המסקנה המתבקשת היא שמהירות מחשב אינה משפיעה בהשוואת מהירותם של אלגוריתמים כי ההשפעה על זמן הריצה של אלגוריתם הוא בגורם קבוע ואילו אלגוריתם יעיל ירוץ הרבה יותר מהר מאלגוריתם פחות יעיל אפילו על מחשב איטי ביותר. T( הסיבוכיות של שלהם,.T( מסתכלים על בדרך זו מתעלמים מהקבועים ומאיברים בעלי סדר נמוך וכן מיישום במכונה ספציפית, T( שייכת. לסיכום: ומסווגים את למשפחת הפונקציות אליה היא סיבוכיות של אלגוריתם היא קבוצה של פונקציות המיוצגות על ידי פונקציה נציגה מהקבוצה, אשר מתארת את זמן הריצה T( של האלגוריתם בסדר גודל. 5
פרק סיבוכיות כדאי לזכור: < < < < < k+ k < < k k+ ( < ( < ε < ( ε > 0 < < < k k+ < < < <! < פרק סיבוכיות סדרי גודל מושגים אסימפטוטיים - Θ שיויון -חסם הדוק- אסימפטוטי הגדרה: f(θ( קבועים חיוביים אם קיימים c, c, 0 כך ש-. לכל 0 c f( c הגדרה שקולה: f(θ( 0<c כך ש- אם קיים f. g ( ( c dpadl divi`ehpi` f,g a,b f Θ(g f Ο(g f Ω(g 7 8 פרק סיבוכיות - O חסם עליון אסימפטוטי f(o( 9 הגדרה: קבועים חיוביים אם קיימים f( c כך ש- 0,c לכל. 0 הגדרה שקולה: f(o( f (. c כך ש- c>0 אם קיים - Ω חסם תחתון אסימפטוטי הגדרה: f(ω( קבועים חיוביים אם קיימים c f( כך ש- 0,c f(ω( לכל. 0 הגדרה שקולה: 0<c כך ש- אם קיים g. f ( ( c פרק סיבוכיות כאשר אומרים על אלגוריתם שהוא שווה Ο זה אומר שזמן הריצה שלו הוא לכל היותר פונקציה ריבועית. כאשר אומרים על אלגוריתם שהוא שווה Θ זה אומר שזמן הריצה שלו הוא תמיד פונקציה ריבועית. כאשר אומרים על אלגוריתם שהוא שווה Ω זה אומר שזמן הריצה שלו הוא לכל הפחות פונקציה של. חשוב לזכור, שכאשר מדברים על סיבוכיות ו/או זמן ריצה של אלגוריתם צריך לציין באיזה מקרה מדובר: Worst case Average case Best case 0
פרק סיבוכיות ביטויים מתמטיים שצריך לזכור: k k k ( + k ( + ( + q k q q + k 0 פרק סיבוכיות לכל מספר ממשי x: סדרה חשבונית: סדרת הריבועים: סדרה הנדסית: - רצפה,(floor הוא המספר השלם x הגדול ביותר שקטן שווה ל- x. - תקרה,(ceil הוא המספר השלם הקטן x ביותר שגדול שווה ל- x. תמיד מתקיים: x < x x x < x + c c a b b a a c a c שינוי בסיס : שינוי חזקה: לכל מספר טבעי תמיד מתקיים: + f ( x f ( x x x x g ( x כלל לופיטל: פרק סיבוכיות בסיבוכיות תרגילים. מהו זמן הריצה המדוייק הסיבוכיות של האלגוריתם הבא: ומהי. k 0; l. for i to -. l l k. for j i + to.. for r to j... k k + פרק סיבוכיות נסמן ב-( T את מספר פעולות החיבור באלגוריתם (מדוע? ונחשב אותן: j \ i 4 5 L 4 4 4 4 5 5 5 5 5 M M M M M M O L T ( + + 4 + L+ ( i( i + i + i i i i ( ( ( ( + ( + ( ( + ( ( + Θ ( 4
פרק סיבוכיות. מצא/י את הסיבוכיות של הפונק' הבאות: T (.5 + 705 450 + 987.5 + 705 450 + 987.5 T ( O( T ( האם: +,T ( O( + + א. ב.,T ( O( + + פרק סיבוכיות. T ( ג. נראה ש- לפי ההגדרה c,c 0 T ( Θ( השקולה: צריך להראות שקיימים קבועים חיוביים c c כך ש- החל מ- c c c (חיובי נקבל: 4 4 c מסויים. ניקח 8 ולכן עבור + + 0 5 פרק סיבוכיות, T ( עבור קבוע c כלשהו: ד. c לכל פונקציה קבועה, T ( נכתוב c. T.(T ( (או Θ(? si( si( O( T ( O( ה. מהו סדר הגודל של si( O( si( O( ( 5. פונקציות לא מונוטוניות: for eve for odd לפונקציה יש רק חסם עליון וחסם תחתון ואין T ( O( 5 חסם הדוק! Θ T ( Ω( פרק סיבוכיות לכל אחת מזוגות הפונקציות הבאות f, g f Ω(g האם O(g, f.4 קבע או g ( f (. f Θ(g 7 8
פרק סיבוכיות א תהיינה פרק סיבוכיות f, g פונקציות חיוביות. הוכח או.5 הפרך את הטענות הבאות: ( 0 ב ג ד f ( + Θ(mi( f (, + Θ( Θ(mi(, Θ( f ( f ( O( O(.I.II f (, לא נכון: O( / O( 9 0 פרק סיבוכיות f ( O( Ω( f ( f ( O( f ( c f ( c f ( c Ω( f (.III פרק סיבוכיות c, f ( קבוע. Θ( f ( c,c f (.V ניקח אולם וניקח Θ( כיוון ש- f ( Ω( וגם f ( O( f ( Θ(.IV. האם לכל שתי פונקציות f,g מתקיים f(o( או להפך? f ( O( וגם f ( Ω( c f ( Θ( f ( c g ( si(, הפונקציות הבאות: f ( si( אינן ניתנות להשוואה.